package com.ruoyi.site.mapper;

import java.util.List;

import com.ruoyi.site.domain.Genres;
import com.ruoyi.site.domain.Moods;
import com.ruoyi.site.domain.Tracks;
import org.apache.ibatis.annotations.Mapper;

/**
 * 音乐曲目Mapper接口
 * 
 * @author chuckeytang
 * @date 2025-08-17
 */
@Mapper
public interface TracksMapper 
{
    /**
     * 查询音乐曲目
     * 
     * @param trackId 音乐曲目主键
     * @return 音乐曲目
     */
    public Tracks selectTracksByTrackId(Long trackId);

    /**
     * 查询音乐曲目列表
     * 
     * @param tracks 音乐曲目
     * @return 音乐曲目集合
     */
    public List<Tracks> selectTracksList(Tracks tracks);

    /**
     * 新增音乐曲目
     * 
     * @param tracks 音乐曲目
     * @return 结果
     */
    public int insertTracks(Tracks tracks);

    /**
     * 修改音乐曲目
     * 
     * @param tracks 音乐曲目
     * @return 结果
     */
    public int updateTracks(Tracks tracks);

    /**
     * 删除音乐曲目
     * 
     * @param trackId 音乐曲目主键
     * @return 结果
     */
    public int deleteTracksByTrackId(Long trackId);

    /**
     * 批量删除音乐曲目
     * 
     * @param trackIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTracksByTrackIds(Long[] trackIds);

    /**
     * 查询所有可用的流派及对应的曲目数量
     * @return 流派列表
     */
    public List<Genres> selectAllGenresWithCounts();

    /**
     * 查询所有可用的情绪及对应的曲目数量
     * @return 情绪列表
     */
    public List<Moods> selectAllMoodsWithCounts();

    /**
     * 查询所有可用的艺术家及对应的曲目数量
     * @return 艺术家列表
     */
    public List<Tracks> selectAllArtistsWithCounts();

    /**
     * 根据 ID 查询音乐的标准价格
     * @param trackId 音乐曲目ID
     * @return 标准价格 (BigDecimal)
     */
    public java.math.BigDecimal selectStandardPriceByTrackId(Long trackId);
}
